package net.lzzy.practices.web.admin;

import net.lzzy.practices.constants.ApiConstant;
import net.lzzy.practices.constants.Messages;
import net.lzzy.practices.entities.User;
import net.lzzy.practices.services.UserService;
import net.lzzy.practices.web.models.ApiResult;
import net.lzzy.practices.web.models.VmUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author admin
 */

@CrossOrigin //用于处理跨域资源共享
@RestController
@RequestMapping(ApiConstant.ROUTE_USER_ROOT) //用于将一个 Java 方法映射到一个或多个 HTTP 请求路径以及指定请求方法
public class UserApiController {
    private final UserService service;


    @Autowired
    public UserApiController(UserService service) {
        this.service = service;

    }

    @GetMapping(ApiConstant.ROUTE_USER_ALL) //用于简化 HTTP GET 请求的处理,用于将一个方法映射到特定的 HTTP GET 请求路径上。
    public ApiResult getUsers(@RequestParam String token){

        List<VmUser> users = new ArrayList<>();
        service.get().forEach(u -> users.add(VmUser.create(u,true)));
        return new ApiResult(true,users.size()+"",users);
    }

    @GetMapping(ApiConstant.ROUTE_USER_PAGE)
    public ApiResult getPagedUsers(@RequestParam int page,@RequestParam int size,@RequestParam String token){
        List<VmUser> users = new ArrayList<>();
        service.get(page,size).forEach(u -> users.add(VmUser.create(u,true)));
        return new ApiResult(true,service.count()+"",users);
    }

    @GetMapping(ApiConstant.ROUTE_USER_SEARCH)
    public ApiResult search(@RequestParam String token,@RequestParam String kw){
        List<VmUser> users = new ArrayList<>();
        service.search(kw).forEach(u -> users.add(VmUser.create(u,true)));
        return new ApiResult(true,users.size()+"",users);
    }

    @GetMapping(ApiConstant.ROUTE_USER_APPLYING)
    public ApiResult getApplyingTeacher(@RequestParam String token){
        List<VmUser> users = new ArrayList<>();
        service.getByApplyTeacher(true).forEach(u -> users.add(VmUser.create(u,true)));
        return new ApiResult(true,users.size()+"",users);
    }
    @PostMapping(ApiConstant.ROUTE_USER_APPROVE)
    public ApiResult approve(@RequestParam String token,@RequestParam UUID id){
        User user = service.approveTeacher(id);
        if(user == null){
            return new ApiResult(false,Messages.WRONG_ID.toString(),null);
        }
        return new ApiResult(true, Messages.SUCCESS.toString(), VmUser.create(user,true));
    }
    @PostMapping(ApiConstant.ROUTE_USER_DECLINE)
    public ApiResult decline(@RequestParam String token, @RequestParam UUID id){
        User user = service.declineTeacher(id);
        if(user == null){
            return new ApiResult(false,Messages.WRONG_ID.toString(),null);
        }
        return new ApiResult(true, Messages.SUCCESS.toString(), VmUser.create(user,true));
    }

    @PostMapping(ApiConstant.ROUTE_USER_BAN)
    public ApiResult ban(@RequestParam String token,@RequestParam UUID id){
        User user = service.banUser(id);
        if(user == null){
            return new ApiResult(false,Messages.WRONG_ID.toString(),null);
        }
        return new ApiResult(true, Messages.SUCCESS.toString(), VmUser.create(user,true));
    }
}


